/* eslint-disable max-lines */
import TauSimpleSelect from '@/components/TauSimpleSelect';
import * as BASE from '@/stores/definitions-base';
import { Input, Switch, DatePicker } from '@alifd/next';
import { t } from '@lingui/macro';
import React, { } from 'react';

const {
  DATETIME_TEXT,
  DATE_TEXT,
  TIME_TEXT,
  EMPTY_TEXT,
  ENUMS: ENUMSBase,
  FieldsGrid: FieldGridBase,
  TitleGrid,
  column: columnBase,
  toSelectDataSource,
} = BASE;
export { DATETIME_TEXT, DATE_TEXT, EMPTY_TEXT, TIME_TEXT, TitleGrid, toSelectDataSource };

/**
 * @param {*} path        属性path
 * @param {*} props       column属性
 * @returns column定义
 */
export function column(...args) {
  return columnBase(partnerModal, ...args);
}

/**
 * 显示一组表单字段
 * ```js
 * {
 *   fields: string[],    // 字段名称，可以使用.来指定嵌套对象属性，例如order.busOrder.shift
 *   columns: number,     // 列数，默认为4,最大为12,最小为1
 *   model: object,       // 字段定义数据模型的根对象，默认不指定，仅在使用子对象作为根模型时设置
 *   overrideModel: object, // 重载字段定义数据模型
 *   mode: string,        // 表单模式，默认为edit，可选view
 *   itemLayout: object,  // FormItem布局配置，默认为{}
 * }
 * ```
 *
 * @param {object} param0
 * @returns
 */
export function FieldsGrid(props) {
  return <FieldGridBase model={partnerModal} {...props} />;
}

//----------------------------------------------------------------------
export const ENUMS = {
  ...ENUMSBase,
  // 1-启用、0-停用
  status: {
    1: t`启用`,
    0: t`停用`,
  },
  statusText: {
    0: t`启用`,
    1: t`停用`,
  },
  // 0：激励型，1：利益型（默认）
  partnerType: {
    0: t`激励型`,
    1: t`利益型`,
  },
  bindAccountType: { // 分账接收方类型
    MERCHANT_ID: t`公司商户号`,
    PERSONAL_OPENID: t`个人微信帐户`,
  },
  //  0-比例 1-指定金额
  type: {
    0: t`比例`,
    1: t`指定金额`,
  },
  bindingPeriod: {
    0: '0个月',
    6: '6个月',
    12: '一年',
    '-1': '永久',
  },
  // ：1 - 男； 2 - 女
  render: {
    1: '男',
    2: '女',
  },
  // ：D+0、D+1、D+2、D+7、D+30(加几值为几，例：D+0 值为0)
  period: {
    0: t`D+0`,
    1: t`D+1`,
    2: t`D+2`,
    7: t`D+7`,
    30: t`D+30`,
  },
  //  true：暂停 false：可分账
  suspensionOfDistribution: {
    true: t`暂停`,
    false: t`可分账`,
  },

  path: {
    1: 'pages/home/index',
    2: 'pages/home/index',
    3: 'pages/home/index',
  },
  _params: {
    1: {
      bizType: 1,
      subType: 1,
    },
    2: {},
    3: {},
  },

  // 获取二维码的路径
  path_params: {
    1: 'pages/home/index?inviteInfo=',
    2: 'pages/home/index?bizType=1&subType=1&inviteInfo=',
    3: 'pages/home/index?inviteInfo=',
  },
};

/**
 * 模型定义：
 * 1. 普通文本仅需要定义label
 * 2. 需要通过枚举转换的值，定义text; 当使用renderer返回组件时，text属性无效，需要通过组件的renderPreview来指定预览时的绘制方式
 * 3. 通用的ui属性需要定制时，定义ui; 特定模式(view, edit, add)下的ui，添加后缀定义为ui_<mode>，例如：ui_view, ui_edit, ui_add, ui_table
 * 4. ui可配置属性包括:
 *    renderer: 内容渲染函数, Form表单中的原型为：(value: any, formData: any, fieldDefinition: any) => ReactNode; Table Column中的原型为: (value: any, columnIndex: number, rowData: any) => ReactNode;
 *    itemProps: 表单Form.Item的属性，可以是对象，或函数({ isPreview: boolean, mode: string, value: any, formData: any, ...otherDefinitions}) => void;
 *    span: Grid Cell占用的列数, 默认为1
 *
 * 【注】获取接口的model定义后，vscode中通过正则替换：^(\s+)"label": "([^']+)"  ===> $1label: t`$2`
 */
export const partnerModal = {
  price: {
    label: '',
  },
  specialCarPriceSum: {
    label: t`包车总额`,
  },
  partnerGroup: {
    label: t`合伙人团队`,
  },
  shuttleBuspriceSum: {
    label: t`专线总额`,
  },
  busPriceSum: {
    label: t`巴士总额`,
  },
  totalAmount: {
    label: t`佣金总金额`,
  },
  specialCarOrder: {
    label: t`包车(订单/金额)`,
  },
  shuttleBusOrder: {
    label: t`专线(订单/金额)`,
  },
  busOrder: {
    label: t`巴士(订单/金额)`,
  },
  orderAmount: {
    label: t`订单总额`,
  },
  username: {
    label: t`用户账号标识，为accountId@domain转义后的结果，一旦生成不可修改`,
  },
  nickname: {
    label: t`昵称`,
  },
  gender: {
    label: t`性别`,
    ui: {
      renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.render)} value={v} />,
      itemProps: { required: true },
    },
  },
  accountId: {
    label: t`集成账号，如第三方系统账号，必须`,
  },
  email: {
    label: t`邮箱账号`,
  },
  status: {
    label: t`状态`,
  },
  fullname: {
    label: t`姓名`,
    ui: {
      itemProps: { required: true },
    },
  },
  mobile: {
    label: t`手机号`,
    ui: {
      itemProps: { required: true },
    },
  },
  remarks: {
    label: t`备注`,
  },
  userTypes: [{
    label: t`用户类型标识数据 1-客户 2-合伙人 3-司机 4-验票员 5-调度员`,
  }],
  material: [{
    label: t`图片列表`,
  }],
  customerInfo: {
    label: t`cbbv协作平台客户信息`,
    agentId: {
      label: t`cbbv协作平台客户信息，仅userTypes包含类型1时存在该字段`,
    },
    inviteCode: {
      label: t`邀请码 编码-用户类型 例：HbXm6M0-2`,
    },
    customerType: {
      label: t`区域类型，必须，0 - 境内用户(内地)； 1 - 境外用户(港澳台), 对应中港通系统customerStatus`,
    },
    channelId: {
      label: t`用户渠道扫码关联`,
    },
    registerTime: {
      label: t`注册时间`,
    },
    attachments: [{
      label: t`附件`,
      title: {
        label: t`附件标题`,
      },
      description: {
        label: t`附件说明`,
      },
      binaryId: [{
        label: t`附件id`,
      }],
    }],
  },
  partnerInfo: {
    label: t`cbbv协作平台合伙人信息`,
    amount: {
      label: t`合伙人当月的预存款`,
      ui: {
        itemProps: { required: true },
      },
    },
    returnRate: {
      label: t`合伙人当前的返现率，从当月缴存的合作金计算得出`,
    },
    discount: {
      label: t`合伙人当前的折扣率，从当月缴存的合作金计算得出`,
    },
    balance: {
      label: t`合伙人余额`,
    },
    beginDate: {
      label: t`起始时间`,
    },
    endDate: {
      label: t`结束时间`,
    },
    registerTime: {
      label: t`注册时间`,
      text: DATETIME_TEXT,
    },
    enablingClause: {
      label: t`是否授权条款`,
    },
    //  0，1个月、6个月、1年（12:默认）、-1:永久
    bindingPeriod: {
      label: t`新用户绑定期限`,
      ui: {
        renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.bindingPeriod)} value={v} />,
        itemProps: { required: true },
      },
    },
    bindingPeriodDesc: {
      label: t`新用户绑定期限说明`,
      ui: {
        renderer: () => <span><b>{t`如果扫码客户为新客户，从该客户注册时间起，在设定期限内，此客户消费订单计入该合伙人业绩。`}</b></span>,
      },
    },
    companyId: {
      label: t`公司id`,
      ui: {
        renderer: (v) => <TauSimpleSelect data={rootStore.partnerStore.company} value={v} />,
      },
    },
    companyName: {
      label: t`公司名称`,
    },
    address: {
      label: t`地址`,
      ui: {
        renderer: (v) => <Input.TextArea value={v} />,
      },
    },
    remark: {
      label: t`备注`,
      ui: {
        renderer: (v) => <Input.TextArea value={v} />,
        span: 3,
      },
    },
    partnerStatus: {
      label: t`状态`,
      ui_table: {
        renderer: (v) => ENUMS.status[v],
      },
    },
    //  0：激励型，1：利益型（默认）
    type: {
      label: t`类型`,
      ui_table: {
        renderer: (v) => ENUMS.partnerType[v],
      },
      ui: {
        renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.partnerType)} value={v} />,
        itemProps: { required: true },
      },
    },
    cashBackRate: {
      label: t`返现率<br/> bus 巴士票返现率：默认0<br/> charteredBus 包车返现率：默认0.05<br/> shuttleBus 班车票返现率：默认0.1`,
      bus: {
        label: t`巴士票返现率`,
        ui: {
          itemProps: { required: true },
        },
      },
      cc: {
        label: t`包车票返现率`,
        ui: {
          itemProps: { required: true },
        },
      },
      sc: {
        label: t`专线票返现率`,
        ui: {
          itemProps: { required: true },
        },
      },
      rs: {
        label: t`拼车票返现率`,
        ui: {
          itemProps: { required: true },
        },
      },
    },
    attachments: [{
      label: t`附件`,
      title: {
        label: t`附件标题`,
      },
      description: {
        label: t`附件说明`,
      },
      binaryId: [{
        label: t`附件id`,
      }],
    }],
    independentAccount: {
      label: t`分账设置信息`,
      period: {
        label: t`分账周期`,
        ui: {
          renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.period)} value={v} />,
          itemProps: { required: true },
        },
      },
      suspensionOfDistribution: {
        label: t`暂停分账`,
        ui: {
          renderer: (v) => (<Switch
            checked={v}
            autoWidth
            checkedChildren="是"
            unCheckedChildren="否"
          />),
        },
      },
      settlementOfDriverCharges: {
        label: t`是否委托平台自动结算司机费用`,
      },
      collectionAccountInformation: {
        label: t`收款账户信息`,
        appId: {
          label: t`公众号appId`,
        },
        accountIdentification: {
          label: t`账户标识`,
        },
        name: {
          label: t`账户名字`,
        },
        type: {
          label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
        },
      },
    },
    discountInfo: {
      label: t`折扣信息`,
      disable: {
        label: t`是否禁用`,
        ui: {
          renderer: (v) => {
            return (<Switch
              checked={v}
              size="small"
              autoWidth
              checkedChildren="启用"
              unCheckedChildren="禁用"
            />);
          },
        },
      },
      failureTime: {
        label: t`失效时间`,
        text: DATETIME_TEXT,
        ui: {
          renderer: (v) => <DatePicker type="datetime" showTime value={v} />,
        },
      },
      bus: {
        label: t`巴士折扣信息`,
        type: {
          label: t`巴士折扣类型`,
          ui: {
            renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.type)} value={v} />,
          },
        },
        discountValue: {
          label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          '{key}': {
            label: t`巴士折扣值[key]`,
          },
        },
      },
      cc: {
        label: t`包车折扣信息`,
        type: {
          label: t`包车折扣类型`,
          ui: {
            renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.type)} value={v} />,
          },
        },
        discountValue: {
          label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          '{key}': {
            label: t`包车折扣值[key]`,
          },
        },
      },
      sc: {
        label: t`专线折扣信息`,
        type: {
          label: t`专线折扣类型`,
          ui: {
            renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.type)} value={v} />,
          },
        },
        discountValue: {
          label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          '{key}': {
            label: t`专线折扣值[key]`,
          },
        },
      },
      rs: {
        label: t`拼车折扣信息`,
        type: {
          label: t`拼车折扣类型`,
          ui: {
            renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.type)} value={v} />,
          },
        },
        discountValue: {
          label: t`折扣值<br/> RMB<br/> HKD<br/> MOP`,
          '{key}': {
            label: t`拼车折扣值[key]`,
          },
        },
      },
    },
  },
  driverInfo: {
    label: t`司机信息`,
    companyId: {
      label: t`公司id`,
    },
    auditStatus: {
      label: t`审核状态是否通过`,
    },
    driverStatus: {
      label: t`司机状态 1-启用、0-停用，控制台设置`,
    },
    dutyStatus: {
      label: t`值班状态 1-正常在岗、0-离岗休假，司机可自行设置，离岗后，将不派单给该司机`,
    },
    dutyVehicleId: {
      label: t`值班车辆 正常在岗时，司机可自行选择关联的车辆，也可以后台设置`,
    },
    dateBirth: {
      label: t`出生年月`,
    },
    permanentLand: {
      label: t`常驻地`,
    },
    licenseMainland: {
      label: t`大陆驾驶证信息`,
      licenseNo: {
        label: t`驾驶证号`,
      },
      vechileType: {
        label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
      },
      validityDate: {
        label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
      },
    },
    licenseHK: {
      label: t`香港驾驶证信息`,
      licenseNo: {
        label: t`驾驶证号`,
      },
      vechileType: {
        label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
      },
      validityDate: {
        label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
      },
    },
    internationalLicense: {
      label: t`国际驾照 选择，无（默认）、 大型客车、中型客车、小型客车、大型货车`,
    },
    attachments: [{
      label: t`附件`,
      title: {
        label: t`附件标题`,
      },
      description: {
        label: t`附件说明`,
      },
      binaryId: [{
        label: t`附件id`,
      }],
    }],
    registerTime: {
      label: t`注册时间`,
    },
    hkMobile: {
      label: t`香港电话`,
    },
    number: {
      label: t`身份证号`,
    },
    address: {
      label: t`住址`,
    },
    type: {
      label: t`1商务车司机 2巴士司机`,
    },
    independentAccount: {
      label: t`分账设置信息`,
      period: {
        label: t`分账周期：T+0、T+1、T+2、T+7、T+30(加几值为几，例：T+0 值为0)`,
      },
      suspensionOfDistribution: {
        label: t`暂停分账 true：暂停 false：可分账`,
      },
      settlementOfDriverCharges: {
        label: t`是否委托平台自动结算司机费用`,
      },
      collectionAccountInformation: {
        label: t`收款账户信息`,
        appId: {
          label: t`公众号appId`,
        },
        accountIdentification: {
          label: t`账户标识`,
        },
        name: {
          label: t`名字`,
        },
        type: {
          label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
        },
      },
    },
  },
  conductorInfo: {
    label: t`检票员信息`,
    registerTime: {
      label: t`注册时间`,
    },
    headimgurl: {
      label: t`头像url地址`,
    },
    remarks: {
      label: t`备注`,
    },
    mobile: {
      label: t`手机`,
    },
    fullname: {
      label: t`名称`,
    },
    companyId: {
      label: t`公司id`,
    },
  },
  dispatcherInfo: {
    label: t`调度员信息`,
    registerTime: {
      label: t`注册时间`,
    },
    headimgurl: {
      label: t`头像url地址`,
    },
    remarks: {
      label: t`备注`,
    },
    mobile: {
      label: t`手机`,
    },
    fullname: {
      label: t`名称`,
    },
    companyId: {
      label: t`公司id`,
    },
  },
  counters: {
    label: t`计数统计`,
    ccorder: {
      label: t`包车订单数`,
    },
    scorder: {
      label: t`班车订单数`,
    },
    busorder: {
      label: t`大巴订单数`,
    },
  },
  crBy: {
    label: t`创建者`,
  },
  upBy: {
    label: t`最后修改者`,
  },
  crDate: {
    label: t`创建时间`,
  },
  upDate: {
    label: t`最后修收时间`,
  },
  tenantId: {
    label: t`租户ID`,
  },
  id: {
    label: '',
  },
  customerMarkCount: {
    label: t`客户绑定数`,
  },
};
